package fr.grobim.hangovers.gestionBudget.daos.comptes.impl;

import java.util.List;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.collections.CollectionUtils;
import org.hibernate.Query;
import org.springframework.stereotype.Repository;

import fr.grobim.hangovers.gestionBudget.beans.comptes.Membre;
import fr.grobim.hangovers.gestionBudget.daos.comptes.MembreDao;
import fr.grobim.hangovers.gestionBudget.daos.impl.AbstractDaoImpl;

@Repository
public class MembreDaoImpl extends AbstractDaoImpl<Membre, Integer> implements MembreDao {
	
	public MembreDaoImpl() {
		super(Membre.class);
	}
	
	@Override
	public Membre consulteMembreParIdentifiants(String login, String motDePasse) {
		String motDePasseMD5 = DigestUtils.md5Hex(motDePasse);
		final String REQ_CONSULTEMEMBREPARIDENTIFIANTS = "FROM Membre m WHERE m.compteUtilisateur.login = :login AND m.compteUtilisateur.motDePasse = :motDePasse";
		
		Query requeteHql = creerQuery(REQ_CONSULTEMEMBREPARIDENTIFIANTS);
		requeteHql.setString("login", login).setString("motDePasse", motDePasseMD5);
		
		return (Membre) requeteHql.uniqueResult();
	}

	@Override
	public Boolean existeMembreAvecLogin(String login) {
		Query req = creerQuery("From Membre m WHERE m.compteUtilisateur.login = :login");
		req.setString("login", login);
		return CollectionUtils.isNotEmpty(req.list());
	}

	@Override
	public Boolean existeMembreAvecSurnom(String surnom) {
		Query req = creerQuery("From Membre m WHERE m.surnom = :surnom");
		req.setString("surnom", surnom);
		return CollectionUtils.isNotEmpty(req.list());
	}

	@Override
	public List<Membre> listerTousMembresInternes() {
		Query req = creerQuery("From Membre m WHERE m.compteUtilisateur.login IS NOT NULL AND m.compteUtilisateur.motDePasse IS NOT NULL");
		return req.list();
	}
	
}
